#include <bits/stdc++.h>
using namespace std;

using Real = long double;
using llt = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

struct Point {
    llt x;
    llt y;
    Point(llt a, llt b):x(a),y(b){}
    llt cross(const Point & r) const {
        return x * r.y - y * r.x;
    }
    const Point operator - (const Point & r) const {
        return {x - r.x, y - r.y};
    }
};

int N, K;

vector<llt> A;
vector<llt> S;
vector<Real> D;
vector<int> Q;

void work(){
    cin >> N;
    A.assign(N, 0);
    for(auto & i : A) cin >> i;

    S.assign(N + 1, 0);
    for(int a,i=1;i<=N;++i){
        S[i] = S[i - 1] + A[N - i];
    }

    D.assign(N + 1, 0);
    Q.assign(N + 10, 0);
    int * bot = Q.data();
    int * top = bot;

    for(int i=1;i<=N;++i){
        while(bot < top and (Point(*top, S[*top]) - Point(*(top - 1), S[*(top - 1)])).cross(Point(i, S[i]) - Point(*top, S[*top])) <= 0){
            top -= 1;
        }
        D[i] = (S[i] - S[*top] + 0.) / (i - *top);
        *++top = i;
    }
    for(int i=N;i>=1;--i){
        cout << fixed << setprecision(12) << D[i] << "\n";
    }
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}
